草庐IT

C++ 运算符 [] 魔法

全部标签

c++ - Boost 中的关键字列表运算符

我正在尝试解析一个属性顺序无关紧要的对象。例如解析employeeemployee{surname="doe",firstname="john",age=30}应该和一样employee{age=30,firstname="john",surname="doe"}所以理想情况下我的规则应该是这样的(不要介意缺少正式定义)unordered_rule%=lit("employee")>>"{">>kwd("surname")["=">quoted_string]/kwd("age")["=">int_]/kwd("firstname")["=">quoted_string]/kwd("a

c++ - 使用一个运算符的重载来重载另一个运算符是一种好习惯吗?

我最近发现了C++的奇妙功能,它允许程序员重载他们创建的类的操作。作为探索这个话题的一种方式,我决定尝试自己制作vector类(class)。作为满足我好奇心的小测试,我最近做了以下操作来为我的类重载相等运算符:95boolVect::operator==(constVect&rhs){96returnthis->getCoord()==rhs.getCoord()98}99100boolVect::operator!=(constVect&rhs){101return!(*this==rhs);102}这可以正确编译和工作。但是,我对这是否是好的/坏的做法有疑问(以及为什么!)。如果

c++ - 模板类内部模板类的外部类运算符

我正在尝试为模板类内部的模板类编写外部类模板运算符。我希望下面的片段能解释我的意思。enumMyEnum{};templateclassClassWithTemplateClass{public:templateclassTemplateClass{//...};};当我这样写运算符时:templateautooperator::TemplateClass&a,intb){//...returna;}编译器返回错误:错误:将“operator你能告诉我这个运算符应该怎么写吗? 最佳答案 ClassWithTemplateClass:

C++ 缩进重载 ostream 运算符

假设Ì有一些类并通过重载左移运算符添加了输出功能:structFoo{inti=1;std::strings="hello";};auto&operator什么是缩进输出的好方法?例子:如果我写std::cout输出是:1hello显然,hello没有缩进。是否有一种简单的方法来缩进整个输出(而不仅仅是第一个元素)? 最佳答案 您正在序列化Foo对象吗?所以从逻辑上讲,Foo的序列化字符串是Foo的实现细节。您可以按照这些思路编写您自己的流类或其他东西,但那是对问题的过度设计。auto&operator

c++ - 重载后递增运算符的复数平方值,无需运算符实例化

这是输出:FirstComplexNumber:Enterrealpartofcomplexnumber:3Enterimaginarypartofcomplexnumber:6SecondComplexNumber:Enterrealpartofcomplexnumber:5Enterimaginarypartofcomplexnumber:-5a==(-27.00+36.00i)b==(5.00-5.00i)a+b==(-22.00+31.00i)a-b==(-32.00+41.00i)a*b==(45.00+315.00i)a*a==(-567.00-1944.00i)b*b==

c++ - 在 C++ 泛型编程中重载增量运算符

如“TheC++ProgrammingLanguage”一书中所述,我无法掌握泛型编程的某个方面。在第24.2节中。“算法和提升”介绍了一种在对象序列中累加值的通用算法(在其他语言中也称为reduce、fold、sum、aggregate)://quotedfrom"TheC++ProgrammingLanguage"4thed.Section24.2p.702templateValsum(Iterfirst,Iterlast){Vals=0;while(first!=last){s=s+*first;++first;}returns;}此函数模板旨在处理任意类型,如double值数组

c++ - 有符号字符的按位运算

如果平台的char类型是有符号的并且一些参数在负数范围内(例如,char_bitmatch('\xf0','\xc0','\x20'))?staticconstexprboolchar_bitmatch(charc,charpos,charneg){return(c&pos)==pos&&!(c&neg);}上下文我问这个问题的原因是因为在带有-O3的GCC8.1.0中,我看到了只能由char_bitmatch('\xf0','\xc0','\x20')错误地返回true。此代码的行为符合预期:staticconstexprboolchar_bitmatch(charc_in,char

c++ - 在没有新运算符的情况下 segmentation 四叉树

在我见过的每个四叉树实现中,segmentation方法总是使用new运算符来创建子单元格。有没有办法避免这种情况?因为我每帧都重新创建我的四叉树以轻松更新它,但是每帧使用new和delete大约200~300次会降低我的性能。这是我的实现:voidUQuadtree::subdivide(Quad*Node){floatHalfExtent=Node->Extent/2;FVector2DCenter=Node->Center;Node->NW=newQuad(FVector2D(Center.X+HalfExtent,Center.Y-HalfExtent),HalfExtent)

c++ - std::string 的转换运算符无法处理赋值

我正在使用代理类型来推迟工作,直到将结果分配给一个变量,它通过在代理类型上使用转换运算符来工作。为std::string添加转换运算符重载时,它适用于从代理构建字符串,但无法编译赋值,并显示以下错误消息:error:ambiguousoverloadfor'operator='虽然这个问题与operatorT()notusedinassignment的问题类似,这里的解决方案不适用,因为我也在使用模板化转换运算符。下面是片段:#include#includestructProxy{templateoperatorT(){Tres;std::cerr如何使这个代理与字符串赋值一起工作?

c++ - 交换运算符的模板实现,合法吗?

我已经尝试为我的一个类实现交换加法运算符:structmytype{constexprmytype(othertypeconst&);constexprmytypeoperator+(othertypeconst&rhs)const;};templateconstexprautooperator+(Tconst&lhs,mytypeconst&rhs)->decltype(rhs+lhs){returnrhs+lhs;}想法是,只要右侧是mytype,右侧接受的任何内容在左侧也可以接受。这适用于icc和VisualStudio,并进入无限递归解析gcc和clang上的decltype(